package com.dxf.chepter07

/**
 *     implicit
 * val num :Int = 3.5 //高精度向低精度 转换错误
 * 高精度向低精度 转换错误 ==> 隐式转换
 * 隐式转换函数 以 implicit关键字声明带有单个参数的函数,这种函数会自动应用,将值从 一个类型转换为另一种类型
 *
 * 注意事项:
 *  1 函数名任意, 和函数签名[xx] 有关  implicit def f1(d: [Double]): [Int]
 *  2 隐式函数可以有多个,但是一种转换方式是唯一的 ,如  double 转 int 的只能是唯一的
 *
 */
object T75_隐式转换和隐士值 {

  def main(args: Array[String]): Unit = {

    //隐式函数和作用于相关
    implicit def f1(d: Double): Int = { //底层生成 f1$1()
      d.toInt
    }
    val num: Int = 3.5 //底层是  f1$1(3.5)
    println("num=" + num)


    //再写一个 double 转 int 会报错,编译器无法识别调用哪个函数
//    implicit def f2(d: Double): Int = { //底层生成 f1$1()
//      d.toInt
//    }
  }
}
